[Amazon FSx for NetApp ONTAP] Access-based Enumeration (ABE) を設定して権限を持たないユーザーにファイルやフォルダを表示させないようにする

[Amazon FSx for NetApp ONTAP] Access-based Enumeration (ABE) を設定して権限を持たないユーザーにファイルやフォルダを表示させないようにする

デフォルトで有効化しても良さそう
Clock Icon2024.04.09

アクセス権限がないファイルやフォルダは表示させたくない

こんにちは、のんピ(@non____97)です。

皆さんはアクセス権限がないファイルやフォルダは表示させたくないと思ったことはありますか? 私はあります。

Amazon FSx for NetApp ONTAP(以降FSxN)ではデフォルトでSMBサーバー上のSMBファイル共有配下のファイルやフォルダは、ファイル共有に接続できれば誰でも一覧を表示することが可能です。

しかし、管理者としては余計なものは見せたくないですし、利用者からしても自分がアクセスできないものが表示されると混乱してしまいます。

そんな時に便利なのがAccess-based Enumeration(ABE, アクセスベースの列挙)です。こちらを使用することで、自分がアクセスすることが可能なファイルやフォルダのみを列挙して表示することが可能です。

ABEの詳細やAmazon FSx for Windows File Serverでの設定方法は以下記事をご覧ください。

https://dev.classmethod.jp/articles/fsx-for-windows-file-server-access-based-enumeration/

FSxNでもABEを有効にすることが可能です。実際に試してみたので紹介します。

いきなりまとめ

  • ファイル共有にAccess-based Enumeration (ABE) を設定することで、アクセス権限がないファイルやフォルダを表示させないようにすることが可能
  • ファイル共有ごとに設定する
    • SVM単位で指定することは不可
  • ABEを有効化しても、ファイル共有自体は非表示にならない
    • ファイルやフォルダに設定されたNTFS ACLに基づいて、表示/非表示が切り替わる
  • デフォルトではABEは無効にされている

やってみた

検証環境

検証環境は以下のとおりです。

AWS DataSyncでワークグループのSMBサーバーをロケーションに設定することはできない件検証環境構成図

AD DCについては以下記事の検証で使用したものを流用します。

https://dev.classmethod.jp/articles/amazon-fsx-for-netapp-ontap-delegated-file-system-administrators-group/

ドメインユーザーの準備

ドメインユーザーtest-user01とtest-user02を追加しました。どちらもFSxAdminGroupというセキュリティグループに属させています。

ADセキュリティグループ

AD DCに対してRDP接続できるようにローカルサーバーのRDP設定でFSxAdminGroupを許可しています。

local server rdp settings

加えて、ローカルグループポリシーエディターを開いて、Computer Configureation-Windows Settings-Security Settings-Local Policies-User Rights Assignment-Allow log on through Remote Desktop ServicesFSxAdminGroupを許可しています。

グループポリシーエディタ

ADをManaged MSADで管理しており、ドメインユーザーを別のEC2インスタンスにRDP接続をさせたい場合は以下re:Postが参考になると思います。

https://repost.aws/ja/knowledge-center/ec2-domain-user-rdp

SMBサーバーとファイル共有の作成

マネジメントコンソールからSMBサーバーを作成し、ドメイン参加させます。

SMBサーバーのドメイン参加

ONTAP CLIからドメイン参加しているSMBサーバーが立ち上がっていることを確認します。

::*> cifs server show
            Server          Status    Domain/Workgroup Authentication
Vserver     Name            Admin     Name             Style
----------- --------------- --------- ---------------- --------------
svm         SMB-SHARE       up        CORP             domain

作成したSMBサーバー内にファイル共有を3つ作成します。

# ボリュームの作成
::*> volume create -vserver svm -volume vol_smb1 -aggregate aggr1 -state online -type RW -security-style ntfs -size 4GB -tiering-policy none -snapshot-policy none -junction-path /vol_smb1
[Job 99] Job succeeded: Successful

::*> volume create -vserver svm -volume vol_smb2 -aggregate aggr1 -state online -type RW -security-style ntfs -size 4GB -tiering-policy none -snapshot-policy none -junction-path /vol_smb2
[Job 101] Job succeeded: Successful

::*> volume create -vserver svm -volume vol_smb3 -aggregate aggr1 -state online -type RW -security-style ntfs -size 4GB -tiering-policy none -snapshot-policy none -junction-path /vol_smb3
[Job 103] Job succeeded: Successful

# ボリュームの確認
::*> volume show -volume vol_smb* -fields security-style, junction-pa
    junction-path        junction-path-source junction-parent
::*> volume show -volume vol_smb* -fields security-style, junction-path
vserver volume   security-style junction-path
------- -------- -------------- -------------
svm     vol_smb1 ntfs           /vol_smb1
svm     vol_smb2 ntfs           /vol_smb2
svm     vol_smb3 ntfs           /vol_smb3
3 entries were displayed.

# ファイル共有の作成
::*> cifs share create -vserver svm -share-name share1 -path /vol_smb1

::*> cifs share create -vserver svm -share-name share2 -path /vol_smb2

::*> cifs share create -vserver svm -share-name share3 -path /vol_smb3

# ファイル共有が作成されたことを確認
::*> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm            c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm            ipc$          /                 browsable  -        -
svm            share1        /vol_smb1         oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm            share2        /vol_smb2         oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm            share3        /vol_smb3         oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
5 entries were displayed.

ファイル共有にアクセス権限がない場合、ファイル共有自体が表示されなくなるのか確認したいので、share2とshare3のACLを絞ります。

::*> cifs share access-control create -share share2 -user-or-group BUILTIN\Administrators -user-group-type windows -permission Full_Control

::*> cifs share access-control create -share share2 -user-or-group CORP\test-user01 -user-group-type windows -permission Full_Control

::*> cifs share access-control delete -share share2 -user-or-group Everyone

::*> cifs share access-control create -share share3 -user-or-group BUILTIN\Administrators -user-group-type windows -permission Full_Control

::*> cifs share access-control create -share share3 -user-or-group CORP\test-user02 -user-group-type windows -permission Full_Control

::*> cifs share access-control delete -share share3 -user-or-group Everyone

::*> cifs share show
Vserver        Share         Path              Properties Comment  ACL
-------------- ------------- ----------------- ---------- -------- -----------
svm            c$            /                 oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm            ipc$          /                 browsable  -        -
svm            share1        /vol_smb1         oplocks    -        Everyone / Full Control
                                               browsable
                                               changenotify
                                               show-previous-versions
svm            share2        /vol_smb2         oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable           CORP\test-user01 / Full Control
                                               changenotify
                                               show-previous-versions
svm            share3        /vol_smb3         oplocks    -        BUILTIN\Administrators / Full Control
                                               browsable           CORP\test-user02 / Full Control
                                               changenotify
                                               show-previous-versions
5 entries were displayed.

アクセス権限がないSMBファイル共有一覧を表示できることを確認

アクセス権限がないSMBファイル共有一覧を表示できることを確認します。

  • ドメインのAdministratorの場合

Administratorから見たSMB共有

  • test-user01の場合

test-user01から見たSMB共有

  • test-user02の場合

test-user02から見たSMB共有

いずれも全てのファイル共有の一覧を表示できています。

ファイル共有のACLで許可されていないファイル共有にアクセスしようとすると、以下のように認証を求められます。

権限がないファイル共有にアクセスしようとした場合

アクセス権限がないファイルやフォルダの一覧を表示できることを確認

アクセス権限がないファイルやフォルダの一覧を表示できることも確認します。

ファイルとフォルダを作成し、NTFS ACLを絞ってあげました。Administrator全てのファイルとフォルダ、それ以外のユーザーは対応したファイルとフォルダ以外に権限を付与していません。

> New-PSDrive -Name "Z" -PSProvider FileSystem -Root "\\SMB-SHARE\share1"

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
Z                                      FileSystem    \\SMB-SHARE\share1

> ls Z:\\

    Directory: \\SMB-SHARE\share1

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          4/9/2024   4:14 AM                administrator_dir
d-----          4/9/2024   4:15 AM                test-user01_dir
d-----          4/9/2024   4:15 AM                test-user02_dir
-a----          4/9/2024   4:16 AM              0 administrator_txt.txt
-a----          4/9/2024   4:16 AM              0 test-user01_txt.txt
-a----          4/9/2024   4:16 AM              0 test-user02_txt.txt

> Get-ChildItem -Path "Z:\\" | ForEach-Object {
    Get-Acl -Path $_.FullName | Format-Table -AutoSize -Wrap
}

    Directory: \\SMB-SHARE\share1

Path              Owner                  Access
----              -----                  ------
administrator_dir BUILTIN\Administrators CORP\Administrator Allow  FullControl

    Directory: \\SMB-SHARE\share1

Path            Owner                  Access
----            -----                  ------
test-user01_dir BUILTIN\Administrators CORP\Administrator Allow  FullControl
                                       CORP\test-user01 Allow  FullControl

    Directory: \\SMB-SHARE\share1

Path            Owner                  Access
----            -----                  ------
test-user02_dir BUILTIN\Administrators CORP\Administrator Allow  FullControl
                                       CORP\test-user02 Allow  FullControl

    Directory: \\SMB-SHARE\share1

Path                  Owner                  Access
----                  -----                  ------
administrator_txt.txt BUILTIN\Administrators CORP\Administrator Allow  FullControl

    Directory: \\SMB-SHARE\share1

Path                Owner                  Access
----                -----                  ------
test-user01_txt.txt BUILTIN\Administrators CORP\Administrator Allow  FullControl
                                           CORP\test-user01 Allow  FullControl

    Directory: \\SMB-SHARE\share1

Path                Owner                  Access
----                -----                  ------
test-user02_txt.txt BUILTIN\Administrators CORP\Administrator Allow  FullControl
                                           CORP\test-user02 Allow  FullControl

test-user01でRDP接続します。ファイル共有配下を確認すると、権限がないファイルやフォルダも一覧されています。

test-user01から見たファイルとフォルダ一覧

権限がないフォルダを開こうとすると、以下のようにアクセスできないと怒られました。

許可されていないフォルダを開こうとした場合

ABEの有効化

それではABEを有効化します。

ABEを有効化する際には、指定したファイル共有にaccess-based-enumerationを設定します。

ファイル共有に設定できるプロパティの一覧は以下のとおりです。

共有プロパティ 説明
oplocks 共有で便宜的ロックを使用することを指定します。これはクライアント側キャッシュとも呼ばれます。
browsable Windows クライアントが共有を参照することを許可します。
showsnapshot クライアントが Snapshot コピーを表示およびトラバースできることを指定します。
changenotify 共有が変更通知要求をサポートすることを指定します。SVM 上の共有では、これはデフォルトの初期プロパティです。
attributecache 属性にすばやくアクセスできるように SMB 共有でのファイル属性のキャッシュを有効にします。デフォルトでは、属性のキャッシュは無効になっています。このプロパティは、 SMB 1.0 経由で共有に接続するクライアントがある場合にのみ有効にしてください。クライアントが SMB 2.x または SMB 3.0 経由で共有に接続している場合、この共有プロパティは適用されません。
continuously-available SMB クライアントが永続的な方法でファイルを開くことを許可します。この方法で開いたファイルは、フェイルオーバーやギブバックなど、システムを停止させるイベントから保護されます。
branchcache 共有内のファイルに対する BranchCache ハッシュの要求をクライアントに許可します。このオプションが役立つのは、 CIFS の BranchCache 設定で動作モードとして「共有ごと」を指定した場合だけです。
access-based-enumeration このプロパティは、この共有で _ アクセスベースの列挙 _ ( ABE )を有効にするように指定します。各ユーザのアクセス権に基づいて ABE フィルタを適用した共有フォルダがユーザに表示され、そのユーザがアクセス権を持たないフォルダやその他の共有リソースは表示されないようにします。
namespace-caching このプロパティは、この共有に接続する SMB クライアントが、 CIFS サーバから返されたディレクトリの列挙結果をキャッシュできることを指定します。これにより、パフォーマンスが向上します。デフォルトでは、 SMB 1 のクライアントはディレクトリの列挙結果をキャッシュしません。SMB 2 および SMB 3 クライアントはデフォルトでディレクトリ列挙結果をキャッシュするため、この共有プロパティを指定してパフォーマンスが向上するのは SMB 1 クライアント接続のみです。
encrypt-data この共有へのアクセス時に SMB 暗号化の使用を義務付けます。SMB データへのアクセスで暗号化をサポートしていない SMB クライアントは、この共有にアクセスできません。

抜粋 : SMB 共有プロパティの概要を使用する

実際にやってみます。

::*> cifs share properties show
Vserver           Share                      Properties
----------------  -------------------------  -----------------------------
svm               c$                         oplocks
                                             browsable
                                             changenotify
                                             show-previous-versions
svm               ipc$                       browsable
svm               share1                     oplocks
                                             browsable
                                             changenotify
                                             show-previous-versions
svm               share2                     oplocks
                                             browsable
                                             changenotify
                                             show-previous-versions
svm               share3                     oplocks
                                             browsable
                                             changenotify
                                             show-previous-versions
5 entries were displayed.

::*> cifs share properties add -share-name share* -share-properties access-based-enumeration
3 entries were acted on.

::*> cifs share properties show
Vserver           Share                      Properties
----------------  -------------------------  -----------------------------
svm               c$                         oplocks
                                             browsable
                                             changenotify
                                             show-previous-versions
svm               ipc$                       browsable
svm               share1                     oplocks
                                             browsable
                                             changenotify
                                             access-based-enumeration
                                             show-previous-versions
svm               share2                     oplocks
                                             browsable
                                             changenotify
                                             access-based-enumeration
                                             show-previous-versions
svm               share3                     oplocks
                                             browsable
                                             changenotify
                                             access-based-enumeration
                                             show-previous-versions
5 entries were displayed.

作成した全てのファイル共有にaccess-based-enumerationを設定しました。

アクセス権限がないSMBファイル共有の一覧を表示できなくなっているかを確認

アクセス権限がないSMBファイル共有一覧を表示できなくなっているかを確認します。

test-user01からSMBサーバーのファイル共有一覧を表示すると、アクセス権限がないshare3も表示されていました。

ABE有効後のtest-user01から見たファイル共有一覧

よくよく調べてみると、ABEを有効化してもファイル共有自体は非表示にならないようです。

  • Access-Based EnumerationがCIFS共有で有効になっていると、共有フォルダまたはその下のファイルに(個人またはグループの権限制限により)アクセスする権限がないユーザの環境には、その共有リソースは表示されません。
    • グローバルオプションは SVM 単位ではなく、共有ごとに ABE を有効にする必要があります

ABE では共有が非表示になることはなく、アクセス権限に基づいて作成されたフォルダやファイルだけが非表示になります。一時的に変更されます

  • ローカル管理者には、引き続き無制限の列挙があります
  • BUILTIN\Administrators グループのメンバーには、ローカルシステムへの無制限のアクセスが許可されます
  • したがって、このグループのアカウントは、ディレクトリ全体を列挙できます
  • デフォルトでは、ABEは無効です。

Access Based Enumeration ( ABE )の仕組み - NetApp

そのため、これは意図した動作です。

アクセス権限がないファイルやフォルダの一覧を表示できないことを確認

本命のアクセス権限がないファイルやフォルダの一覧を表示できないことを確認します。

test-user01からSMBサーバーのファイル共有share1配下にアクセスすると、アクセス権限がないファイルやフォルダは表示されないようになりました。

ABE有効後のtest-user01から見たshare1配下のリスト

なお、全てのファイル、フォルダの権限を持つAdministratorは全てのファイル、フォルダの一覧を表示できました。

ABE有効後のAdministratorから見たshare1配下のリスト

ABEが正常に動作していますね。

デフォルトで有効化しても良さそう

[Amazon FSx for NetApp ONTAP] Access-based Enumeration(ABE) を使用して権限を持たないユーザーにファイルやフォルダを表示させないようにしました。

特に有効にして困ることはないと思うので、デフォルトで有効化しても良さそうですね。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.